In [8]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader as dr
import datetime as dt

from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM
In [9]:
dataset_train = pd.read_csv('D:\MeezanBankTrain.csv')
training_set = dataset_train.iloc[:, 4:5].values
In [54]:
stock_price_train = dataset_train.iloc[:-120, 4:5].values
In [55]:
sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set).reshape(-1,1)
In [56]:
X_train = []
y_train = []
for i in range(120, len(training_set_scaled)):
    X_train.append(training_set_scaled[i-120:i, 0])
    y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)
In [57]:
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
In [58]:
regressor = Sequential()
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32, verbose='auto')
Epoch 1/100
31/31 [==============================] - 14s 214ms/step - loss: 0.0203
Epoch 2/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0055
Epoch 3/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0042
Epoch 4/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0042
Epoch 5/100
31/31 [==============================] - 7s 215ms/step - loss: 0.0034
Epoch 6/100
31/31 [==============================] - 7s 223ms/step - loss: 0.0033
Epoch 7/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0029
Epoch 8/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0033
Epoch 9/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0028
Epoch 10/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0029
Epoch 11/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0027
Epoch 12/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0037
Epoch 13/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0025
Epoch 14/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0024
Epoch 15/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0023
Epoch 16/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0027
Epoch 17/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0023
Epoch 18/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0023
Epoch 19/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0024
Epoch 20/100
31/31 [==============================] - 6s 209ms/step - loss: 0.0025
Epoch 21/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0018
Epoch 22/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0020
Epoch 23/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0021
Epoch 24/100
31/31 [==============================] - 7s 225ms/step - loss: 0.0020
Epoch 25/100
31/31 [==============================] - 7s 238ms/step - loss: 0.0020
Epoch 26/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0019
Epoch 27/100
31/31 [==============================] - 7s 232ms/step - loss: 0.0020
Epoch 28/100
31/31 [==============================] - 7s 238ms/step - loss: 0.0017
Epoch 29/100
31/31 [==============================] - 7s 224ms/step - loss: 0.0017
Epoch 30/100
31/31 [==============================] - 7s 225ms/step - loss: 0.0016
Epoch 31/100
31/31 [==============================] - 7s 219ms/step - loss: 0.0018
Epoch 32/100
31/31 [==============================] - 7s 217ms/step - loss: 0.0017
Epoch 33/100
31/31 [==============================] - 7s 224ms/step - loss: 0.0017 1s - lo
Epoch 34/100
31/31 [==============================] - 7s 222ms/step - loss: 0.0016
Epoch 35/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0016
Epoch 36/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0017
Epoch 37/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0016
Epoch 38/100
31/31 [==============================] - 6s 209ms/step - loss: 0.0017
Epoch 39/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0016
Epoch 40/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0013
Epoch 41/100
31/31 [==============================] - 7s 217ms/step - loss: 0.0015
Epoch 42/100
31/31 [==============================] - 7s 223ms/step - loss: 0.0014
Epoch 43/100
31/31 [==============================] - 7s 222ms/step - loss: 0.0015
Epoch 44/100
31/31 [==============================] - 7s 214ms/step - loss: 0.0016
Epoch 45/100
31/31 [==============================] - 6s 210ms/step - loss: 0.0014
Epoch 46/100
31/31 [==============================] - 6s 210ms/step - loss: 0.0014
Epoch 47/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0015
Epoch 48/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0013
Epoch 49/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0013
Epoch 50/100
31/31 [==============================] - 7s 217ms/step - loss: 0.0015
Epoch 51/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0014
Epoch 52/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0012
Epoch 53/100
31/31 [==============================] - 7s 222ms/step - loss: 0.0013
Epoch 54/100
31/31 [==============================] - 7s 214ms/step - loss: 0.0012
Epoch 55/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0012
Epoch 56/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0012
Epoch 57/100
31/31 [==============================] - 6s 210ms/step - loss: 0.0011
Epoch 58/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0012
Epoch 59/100
31/31 [==============================] - 7s 216ms/step - loss: 0.0013
Epoch 60/100
31/31 [==============================] - 7s 222ms/step - loss: 0.0012
Epoch 61/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0013
Epoch 62/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0014
Epoch 63/100
31/31 [==============================] - 8s 272ms/step - loss: 0.0011
Epoch 64/100
31/31 [==============================] - 6s 209ms/step - loss: 0.0011
Epoch 65/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0013
Epoch 66/100
31/31 [==============================] - 6s 210ms/step - loss: 0.0011
Epoch 67/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0012
Epoch 68/100
31/31 [==============================] - 8s 274ms/step - loss: 0.0011
Epoch 69/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0011
Epoch 70/100
31/31 [==============================] - 6s 210ms/step - loss: 0.0011
Epoch 71/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0010
Epoch 72/100
31/31 [==============================] - 6s 210ms/step - loss: 0.0010
Epoch 73/100
31/31 [==============================] - 8s 273ms/step - loss: 9.4430e-04
Epoch 74/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0010
Epoch 75/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0010
Epoch 76/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0010
Epoch 77/100
31/31 [==============================] - 9s 284ms/step - loss: 0.0010
Epoch 78/100
31/31 [==============================] - 7s 217ms/step - loss: 9.3335e-04
Epoch 79/100
31/31 [==============================] - 7s 242ms/step - loss: 0.0011
Epoch 80/100
31/31 [==============================] - 7s 217ms/step - loss: 9.8427e-04
Epoch 81/100
31/31 [==============================] - 9s 288ms/step - loss: 9.5096e-04
Epoch 82/100
31/31 [==============================] - 7s 240ms/step - loss: 9.5110e-04
Epoch 83/100
31/31 [==============================] - 10s 317ms/step - loss: 9.5059e-04
Epoch 84/100
31/31 [==============================] - 8s 259ms/step - loss: 0.0010
Epoch 85/100
31/31 [==============================] - 9s 297ms/step - loss: 8.5893e-04
Epoch 86/100
31/31 [==============================] - 8s 245ms/step - loss: 8.8234e-04
Epoch 87/100
31/31 [==============================] - 7s 223ms/step - loss: 0.0010
Epoch 88/100
31/31 [==============================] - 9s 277ms/step - loss: 8.9222e-04
Epoch 89/100
31/31 [==============================] - 7s 216ms/step - loss: 0.0012
Epoch 90/100
31/31 [==============================] - 7s 216ms/step - loss: 9.3046e-04
Epoch 91/100
31/31 [==============================] - 9s 278ms/step - loss: 8.7624e-04
Epoch 92/100
31/31 [==============================] - 7s 224ms/step - loss: 8.9251e-04
Epoch 93/100
31/31 [==============================] - 9s 298ms/step - loss: 9.1918e-04
Epoch 94/100
31/31 [==============================] - 7s 218ms/step - loss: 8.6880e-04
Epoch 95/100
31/31 [==============================] - 7s 217ms/step - loss: 8.6037e-04
Epoch 96/100
31/31 [==============================] - 9s 279ms/step - loss: 7.8722e-04
Epoch 97/100
31/31 [==============================] - 7s 216ms/step - loss: 7.8024e-04
Epoch 98/100
31/31 [==============================] - 7s 232ms/step - loss: 8.5672e-04
Epoch 99/100
31/31 [==============================] - 8s 256ms/step - loss: 7.8421e-04
Epoch 100/100
31/31 [==============================] - 7s 220ms/step - loss: 7.2124e-04
Out[58]:
<keras.callbacks.History at 0x1a3cd895e20>
In [18]:
history = regressor.fit(X_train, y_train, validation_split=0.33, epochs=150, batch_size=10, verbose=0)
In [19]:
# list all data in history
print(history.history.keys())
dict_keys(['loss', 'val_loss'])
In [20]:
# import matplotlib as plt
# # summarize history for accuracy
# plt.plot(history.history['accuracy'])
# plt.plot(history.history['val_accuracy'])
# plt.title('model accuracy')
# plt.ylabel('accuracy')
# plt.xlabel('epoch')
# plt.legend(['train', 'test'], loc='upper left')
# plt.show()
In [21]:
# summarize history for loss
plt.figure(figsize=(20, 6),dpi=80)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'],loc='upper right')
plt.grid()
plt.show()
In [22]:
dataset_test = pd.read_csv('D:/MeezanBankTest.csv')
In [23]:
dataset_test.replace(' ','',inplace=True)
dataset_test = dataset_test.dropna()
In [24]:
data2 = dataset_test.iloc[:, 4:5].values
total_test = pd.concat((dataset_train['Close'], dataset_test['Close']), axis=0)
In [59]:
inputs = total_test[len(total_test) - len(dataset_test) - 120:].values
inputs = inputs.reshape(-1,1)
inputs = sc.transform(inputs)
In [60]:
X_test = []
for i in range(120, len(inputs)):
    X_test.append(inputs[i-120:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = sc.inverse_transform(predicted_stock_price)
In [61]:
predicted_stock_price_train = regressor.predict(X_train)
predicted_stock_price_train = sc.inverse_transform(predicted_stock_price_train)
predicted_stock_price_train.shape
Out[61]:
(991, 1)
In [66]:
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 6),dpi=80)
plt.plot(dataset_test['Close'], color = 'red', label = 'Real Meezan Stock Price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted Meezan Stock Price')
plt.title('Meezan Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Meezan Stock Price')
plt.legend()
plt.grid()
plt.show()
In [63]:
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
testScore =(mean_squared_error(dataset_test['Close'], predicted_stock_price))
print('Test Score: %.2f RMSE' % (testScore))
print('Test Score: %.2f MAE' % mean_absolute_error(dataset_test['Close'], predicted_stock_price))
print('Test Score: %.2f R2' % r2_score(dataset_test['Close'],predicted_stock_price))
Test Score: 34.94 RMSE
Test Score: 4.07 MAE
Test Score: 0.56 R2
In [64]:
print(mean_squared_error(stock_price_train, predicted_stock_price_train))
print(r2_score(stock_price_train, predicted_stock_price_train))
307.36942943796237
-0.9811720174403711
In [69]:
plt.figure(figsize=(20, 6),dpi=80)
plt.plot(stock_price_train, color = 'red', label = 'Real Meezan Stock Price')
plt.plot(predicted_stock_price_train, color = 'blue', label = 'Predicted Meezan Stock Price')
plt.title('Meezan Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Meezan Stock Price')
plt.legend()
plt.grid()
plt.show()
In [70]:
real_data = [inputs[len(inputs) - 120:len(inputs + 1), 0]]
real_data = np.array(real_data)
real_data = np.reshape(real_data , (real_data.shape[0], real_data.shape[1], 1))
In [71]:
prediction = regressor.predict(real_data)
prediction = sc.inverse_transform(prediction)
print(f"Prediction : {prediction}")
Prediction : [[132.94518]]
In [72]:
regressor_30 = Sequential()
regressor_30.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor_30.add(Dropout(0.2))
regressor_30.add(LSTM(units = 50, return_sequences = True))
regressor_30.add(Dropout(0.2))
regressor_30.add(LSTM(units = 50, return_sequences = True))
regressor_30.add(Dropout(0.2))
regressor_30.add(LSTM(units = 50))
regressor_30.add(Dropout(0.2))
regressor_30.add(Dense(units = 30))
regressor_30.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor_30.fit(X_train, y_train, epochs = 100, batch_size = 32, verbose='auto')
Epoch 1/100
31/31 [==============================] - 15s 228ms/step - loss: 0.0503
Epoch 2/100
31/31 [==============================] - 7s 218ms/step - loss: 0.0139
Epoch 3/100
31/31 [==============================] - 7s 220ms/step - loss: 0.0097
Epoch 4/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0076
Epoch 5/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0064
Epoch 6/100
31/31 [==============================] - 7s 214ms/step - loss: 0.0061
Epoch 7/100
31/31 [==============================] - 7s 221ms/step - loss: 0.0052
Epoch 8/100
31/31 [==============================] - 7s 215ms/step - loss: 0.0048
Epoch 9/100
31/31 [==============================] - 7s 219ms/step - loss: 0.0045
Epoch 10/100
31/31 [==============================] - 7s 219ms/step - loss: 0.0046
Epoch 11/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0043
Epoch 12/100
31/31 [==============================] - 7s 215ms/step - loss: 0.0040
Epoch 13/100
31/31 [==============================] - 7s 224ms/step - loss: 0.0035
Epoch 14/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0036
Epoch 15/100
31/31 [==============================] - 7s 214ms/step - loss: 0.0034
Epoch 16/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0030
Epoch 17/100
31/31 [==============================] - 8s 275ms/step - loss: 0.0031
Epoch 18/100
31/31 [==============================] - 8s 247ms/step - loss: 0.0030
Epoch 19/100
31/31 [==============================] - 7s 240ms/step - loss: 0.0027
Epoch 20/100
31/31 [==============================] - 7s 222ms/step - loss: 0.0025
Epoch 21/100
31/31 [==============================] - 7s 224ms/step - loss: 0.0027
Epoch 22/100
31/31 [==============================] - 7s 217ms/step - loss: 0.0025
Epoch 23/100
31/31 [==============================] - 7s 220ms/step - loss: 0.0023
Epoch 24/100
31/31 [==============================] - 7s 238ms/step - loss: 0.0023
Epoch 25/100
31/31 [==============================] - 7s 222ms/step - loss: 0.0022
Epoch 26/100
31/31 [==============================] - 7s 225ms/step - loss: 0.0021
Epoch 27/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0020
Epoch 28/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0020
Epoch 29/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0022
Epoch 30/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0020
Epoch 31/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0022
Epoch 32/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0018
Epoch 33/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0019
Epoch 34/100
31/31 [==============================] - 7s 217ms/step - loss: 0.0018
Epoch 35/100
31/31 [==============================] - 8s 274ms/step - loss: 0.0018
Epoch 36/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0017
Epoch 37/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0018
Epoch 38/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0016
Epoch 39/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0016
Epoch 40/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0017
Epoch 41/100
31/31 [==============================] - 9s 283ms/step - loss: 0.0015
Epoch 42/100
31/31 [==============================] - 7s 240ms/step - loss: 0.0017
Epoch 43/100
31/31 [==============================] - 7s 223ms/step - loss: 0.0014
Epoch 44/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0013
Epoch 45/100
31/31 [==============================] - 8s 265ms/step - loss: 0.0014
Epoch 46/100
31/31 [==============================] - 7s 215ms/step - loss: 0.0014
Epoch 47/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0013
Epoch 48/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0015
Epoch 49/100
31/31 [==============================] - 8s 275ms/step - loss: 0.0013
Epoch 50/100
31/31 [==============================] - 7s 215ms/step - loss: 0.0013
Epoch 51/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0014
Epoch 52/100
31/31 [==============================] - 9s 277ms/step - loss: 0.0011
Epoch 53/100
31/31 [==============================] - 7s 210ms/step - loss: 0.0012
Epoch 54/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0012
Epoch 55/100
31/31 [==============================] - 8s 268ms/step - loss: 0.0011
Epoch 56/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0012
Epoch 57/100
31/31 [==============================] - 8s 273ms/step - loss: 0.0012
Epoch 58/100
31/31 [==============================] - 7s 224ms/step - loss: 0.0011
Epoch 59/100
31/31 [==============================] - 9s 278ms/step - loss: 0.0011
Epoch 60/100
31/31 [==============================] - 7s 211ms/step - loss: 0.0011
Epoch 61/100
31/31 [==============================] - 9s 280ms/step - loss: 9.6418e-04
Epoch 62/100
31/31 [==============================] - 7s 228ms/step - loss: 0.0010
Epoch 63/100
31/31 [==============================] - 8s 275ms/step - loss: 0.0010
Epoch 64/100
31/31 [==============================] - 7s 212ms/step - loss: 0.0010
Epoch 65/100
31/31 [==============================] - 8s 274ms/step - loss: 0.0011
Epoch 66/100
31/31 [==============================] - 7s 214ms/step - loss: 9.7839e-04
Epoch 67/100
31/31 [==============================] - 7s 227ms/step - loss: 9.8499e-04
Epoch 68/100
31/31 [==============================] - 8s 248ms/step - loss: 0.0011
Epoch 69/100
31/31 [==============================] - 7s 213ms/step - loss: 0.0012
Epoch 70/100
31/31 [==============================] - 8s 275ms/step - loss: 9.4076e-04
Epoch 71/100
31/31 [==============================] - 7s 237ms/step - loss: 9.7838e-04 1s - loss: 9.09
Epoch 72/100
31/31 [==============================] - 8s 238ms/step - loss: 9.2363e-04
Epoch 73/100
31/31 [==============================] - 7s 237ms/step - loss: 9.6621e-04
Epoch 74/100
31/31 [==============================] - 8s 252ms/step - loss: 9.7447e-04
Epoch 75/100
31/31 [==============================] - 9s 292ms/step - loss: 9.4819e-04
Epoch 76/100
31/31 [==============================] - 7s 222ms/step - loss: 9.3123e-04
Epoch 77/100
31/31 [==============================] - 9s 280ms/step - loss: 8.8864e-04
Epoch 78/100
31/31 [==============================] - 7s 219ms/step - loss: 8.5989e-04
Epoch 79/100
31/31 [==============================] - 8s 261ms/step - loss: 9.1927e-04
Epoch 80/100
31/31 [==============================] - 8s 276ms/step - loss: 8.7506e-04
Epoch 81/100
31/31 [==============================] - 7s 214ms/step - loss: 8.3994e-04
Epoch 82/100
31/31 [==============================] - 7s 232ms/step - loss: 7.7884e-04
Epoch 83/100
31/31 [==============================] - 9s 265ms/step - loss: 9.3628e-04
Epoch 84/100
31/31 [==============================] - 9s 277ms/step - loss: 8.3433e-04
Epoch 85/100
31/31 [==============================] - 7s 212ms/step - loss: 8.0432e-04
Epoch 86/100
31/31 [==============================] - 8s 271ms/step - loss: 8.9565e-04
Epoch 87/100
31/31 [==============================] - 7s 212ms/step - loss: 8.0199e-04
Epoch 88/100
31/31 [==============================] - 7s 212ms/step - loss: 8.5778e-04
Epoch 89/100
31/31 [==============================] - 9s 287ms/step - loss: 7.7508e-04
Epoch 90/100
31/31 [==============================] - 10s 323ms/step - loss: 7.3071e-04
Epoch 91/100
31/31 [==============================] - 7s 219ms/step - loss: 8.3029e-04
Epoch 92/100
31/31 [==============================] - 8s 276ms/step - loss: 8.0912e-04 2s - loss: 8
Epoch 93/100
31/31 [==============================] - 7s 214ms/step - loss: 7.2412e-04
Epoch 94/100
31/31 [==============================] - 9s 279ms/step - loss: 9.1244e-04
Epoch 95/100
31/31 [==============================] - 8s 257ms/step - loss: 9.3773e-04
Epoch 96/100
31/31 [==============================] - 9s 265ms/step - loss: 8.2399e-04
Epoch 97/100
31/31 [==============================] - 9s 281ms/step - loss: 8.6276e-04
Epoch 98/100
31/31 [==============================] - 7s 211ms/step - loss: 7.6608e-04
Epoch 99/100
31/31 [==============================] - 8s 275ms/step - loss: 7.3418e-04
Epoch 100/100
31/31 [==============================] - 7s 211ms/step - loss: 7.8573e-04
Out[72]:
<keras.callbacks.History at 0x1a3da1d5ee0>
In [73]:
real_data_30 = [inputs[len(inputs) - 120:len(inputs + 1), 0]]
real_data_30 = np.array(real_data_30)
real_data_30 = np.reshape(real_data_30 , (real_data_30.shape[0], real_data_30.shape[1], 1))
In [74]:
prediction_30 = regressor_30.predict(real_data_30)
prediction_30 = sc.inverse_transform(prediction_30)
print(f"Prediction : {prediction_30.transpose()}")
Prediction : [[140.57155]
 [141.63603]
 [141.68106]
 [140.95215]
 [140.95436]
 [141.08115]
 [140.24341]
 [139.09885]
 [141.76582]
 [140.32637]
 [141.23013]
 [140.96193]
 [140.86388]
 [140.9999 ]
 [140.46709]
 [140.21004]
 [139.78902]
 [140.9546 ]
 [141.26627]
 [141.10019]
 [140.65361]
 [140.15009]
 [140.56523]
 [140.68362]
 [140.26105]
 [140.81291]
 [141.64565]
 [141.49438]
 [140.22234]
 [140.0946 ]]
In [75]:
DataFrame = pd.DataFrame(prediction_30)
prediction  = DataFrame.T
Prediction_Total = pd.concat((dataset_test['Close'],prediction), axis=0,sort=True,ignore_index=True)
In [76]:
plt.figure(figsize=(20, 6),dpi=80)
plt.plot(prediction, color = 'blue', label = 'Predicted Stock Price')
plt.title('Meezan Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Meezan Stock Price')
plt.legend()
plt.grid()
plt.show()
In [77]:
plt.figure(figsize=(20, 6),dpi=80)
plt.plot(Prediction_Total, color = 'blue', label = 'Predicted Stock Price')
plt.plot(dataset_test['Close'], color = 'red',label='Real Stock Price')
plt.title('Meezan Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Meezan Stock Price')
plt.legend()
plt.grid()
plt.show()
In [78]:
regressor_30.summary()
Model: "sequential_3"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 lstm_12 (LSTM)              (None, 120, 50)           10400     
                                                                 
 dropout_12 (Dropout)        (None, 120, 50)           0         
                                                                 
 lstm_13 (LSTM)              (None, 120, 50)           20200     
                                                                 
 dropout_13 (Dropout)        (None, 120, 50)           0         
                                                                 
 lstm_14 (LSTM)              (None, 120, 50)           20200     
                                                                 
 dropout_14 (Dropout)        (None, 120, 50)           0         
                                                                 
 lstm_15 (LSTM)              (None, 50)                20200     
                                                                 
 dropout_15 (Dropout)        (None, 50)                0         
                                                                 
 dense_3 (Dense)             (None, 30)                1530      
                                                                 
=================================================================
Total params: 72,530
Trainable params: 72,530
Non-trainable params: 0
_________________________________________________________________
In [40]:
import cufflinks as cf
import plotly.graph_objects as go
from plotly.offline import iplot, init_notebook_mode
import matplotlib.pyplot as plt
In [41]:
cf.go_offline()
init_notebook_mode()
In [42]:
TICKER = "Meezan"
dataset_train["Close"].plot(title=f"{TICKER}'s stock price",figsize=(20, 6),grid=True,xlabel='Time',ylabel='Price')
Out[42]:
<AxesSubplot:title={'center':"Meezan's stock price"}, xlabel='Time', ylabel='Price'>
In [43]:
qf = cf.QuantFig(dataset_train, title="Meezan's stock price in 2021", name='Meezan')
qf.iplot()
In [44]:
fig = go.Figure(data=
    [go.Candlestick(x=dataset_train.index,
                    open=dataset_train["Open"],
                    high=dataset_train["High"],
                    low=dataset_train["Low"],
                    close=dataset_train["Close"])]
)

fig.update_layout(
    title=f"{TICKER}'s adjusted stock price",
    yaxis_title="Price ($)"
)

fig.show()
In [45]:
qf = cf.QuantFig(dataset_train, title="Meezan's stock price in 2021", name='Meezan')
qf.add_sma(periods=14, column='Close', color='purple')
qf.iplot()
In [46]:
qf = cf.QuantFig(dataset_train, title="Meezan's stock price in 2021", name='Meezan')
qf.add_sma([10, 50], width=2, color=['yellow', 'red'])
qf.iplot()
In [47]:
qf.add_rsi(periods=14, color='green')
qf.iplot()
In [48]:
qf.add_bollinger_bands(periods=20, boll_std=2 ,colors=['orange','grey'], fill=True)
qf.iplot()
In [49]:
qf.add_volume()
qf.iplot()
In [50]:
qf.add_macd()
qf.iplot()
In [ ]: